Java 8 এ Lambda Expressions এবং Streams API পIntroduced, যা কোড লেখার পদ্ধতিকে আরও কার্যকর এবং সংক্ষিপ্ত করে তোলে। Lambda expressions ব্যবহার করে, আপনি functional programming ধারণা Java তে প্রয়োগ করতে পারেন, এবং Regex এর সাথে একত্রে ব্যবহার করে আপনি আরও সংক্ষিপ্ত এবং কার্যকরী কোড তৈরি করতে পারেন।
এখানে আমরা Lambda Expressions এবং Regex এর Integration কিভাবে করা যায়, তা দেখব।
Lambda expression হল একটি ছোট আকারের ফাংশন যা method implementation ছাড়া প্যারামিটার গ্রহণ করে এবং একটি কার্যকরী মান ফেরত দেয়। এটি Functional Interface এর সাথে কাজ করে।
Syntax:
(parameters) -> expression
উদাহরণ:
(int x, int y) -> x + y
এটি একটি Functional Interface
এর মেথড apply(int x, int y)
কে বাস্তবায়িত করবে।
Regex ব্যবহার করে আপনি স্ট্রিং ম্যানিপুলেশন, ফিল্টারিং, এবং প্যাটার্ন ম্যাচিং কাজ করতে পারেন, এবং যখন আপনি Lambda expressions এর সাথে এটি ইন্টিগ্রেট করেন, তখন আপনি আরও দ্রুত এবং সংক্ষিপ্ত কোড লিখতে পারবেন।
Lambda expressions ব্যবহার করে স্ট্রিংয়ের মধ্যে regex matching করতে পারে, যেটি প্রথাগত loop বা for-each এর তুলনায় সংক্ষিপ্ত এবং পরিষ্কার। এখানে দেখানো হলো কীভাবে Streams API এবং Lambda expressions এর সাথে Regex ব্যবহার করা যায়।
ধরা যাক, আমাদের একটি List of Strings আছে এবং আমরা সেই স্ট্রিংগুলির মধ্যে শুধুমাত্র যেগুলো একটি নির্দিষ্ট regex pattern মেলে তা ফিল্টার করতে চাই।
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
public class LambdaRegexExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "cherry", "apricot", "mango");
// Define regex pattern for words starting with 'a'
String pattern = "^a.*";
// Use Stream and Lambda Expression to filter strings
List<String> filteredStrings = strings.stream()
.filter(s -> s.matches(pattern)) // Lambda expression for regex matching
.collect(Collectors.toList());
// Print the filtered result
filteredStrings.forEach(System.out::println);
}
}
apple
apricot
s -> s.matches(pattern)
এখানে matches()
method ব্যবহার করা হয়েছে যেটি Regex প্যাটার্নের সাথে স্ট্রিং ম্যাচিং চেক করে। এটি একটি functional interface হিসেবে কাজ করে এবং স্ট্রিং ফিল্টার করার জন্য ব্যবহার করা হয়েছে।strings.stream()
ব্যবহার করে স্ট্রিংগুলির একটি স্ট্রিম তৈরি করা হয়েছে এবং তারপর .filter()
ব্যবহার করে শুধুমাত্র সেই স্ট্রিংগুলোকে ফিল্টার করা হয়েছে যেগুলোর সাথে regex প্যাটার্ন মেলে।একটি সাধারণ ব্যবহার হতে পারে regex substitution (অথবা রূপান্তর)। আমরা Lambda expression ব্যবহার করে স্ট্রিংয়ের মধ্যে substitution করতে পারি, যেখানে regex প্যাটার্নের মাধ্যমে এক বা একাধিক অংশ পরিবর্তন করা হবে।
ধরা যাক, আমাদের একটি List of Strings রয়েছে এবং আমরা সমস্ত digits (সংখ্যা) গুলোকে একটি নির্দিষ্ট character দিয়ে প্রতিস্থাপন করতে চাই।
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
public class RegexSubstitutionLambda {
public static void main(String[] args) {
List<String> strings = Arrays.asList("hello123", "world456", "java789");
// Define regex pattern for digits
String pattern = "\\d+";
// Replace digits with '#' using Stream and Lambda
List<String> substitutedStrings = strings.stream()
.map(s -> s.replaceAll(pattern, "#")) // Lambda expression for substitution
.collect(Collectors.toList());
// Print the substituted result
substitutedStrings.forEach(System.out::println);
}
}
hello#
world#
java#
s -> s.replaceAll(pattern, "#")
এখানে replaceAll()
মেথড ব্যবহার করা হয়েছে যা স্ট্রিংয়ের মধ্যে সংখ্যাগুলোকে #
দিয়ে প্রতিস্থাপন করেছে। এটি Lambda expression এর মাধ্যমে প্রতিটি স্ট্রিংয়ের উপর প্রয়োগ করা হয়েছে।এখন একটি আরও উন্নত উদাহরণ দেখি যেখানে আমরা stream এবং regex এর সাথে আরও জটিল Lambda expressions ব্যবহার করি।
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
public class ComplexLambdaRegexExample {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple123", "banana456", "apricot789", "grape101");
// Define regex pattern for strings containing digits
String pattern = ".*\\d+.*";
// Use Stream, Lambda Expression, and Regex to filter and transform
List<String> transformedStrings = strings.stream()
.filter(s -> s.matches(pattern)) // Filter strings with digits using regex
.map(s -> s.toUpperCase()) // Convert matched strings to uppercase
.collect(Collectors.toList());
// Print the transformed result
transformedStrings.forEach(System.out::println);
}
}
APPLE123
BANANA456
APRICOT789
GRAPE101
s -> s.matches(pattern)
এবং s -> s.toUpperCase()
—এখানে প্রথমে regex matching এর মাধ্যমে সঠিক স্ট্রিং নির্বাচন করা হয়েছে এবং তারপর uppercase রূপান্তর করা হয়েছে।.filter()
মেথডটি regex প্যাটার্নের সাথে মিলে এমন স্ট্রিং ফিল্টার করে এবং .map()
মেথডটি প্রত্যেকটি স্ট্রিংকে uppercase রূপে রূপান্তর করে।Pattern.compile()
ব্যবহার করুন এবং তারপর ব্যবহার করুন। এটি Regex প্যাটার্নের কম্পাইল করার খরচ কমাবে।Lambda Expressions এবং Streams API এর সাথে Regex ইন্টিগ্রেট করে আপনি আরও সংক্ষিপ্ত, পরিষ্কার এবং কার্যকর কোড লিখতে পারেন। এই দুটি শক্তিশালী ফিচারের সংমিশ্রণ আপনার স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন ম্যাচিংয়ের কাজকে দ্রুততর এবং আরও উন্নত করে তুলবে। তবে, performance optimization এর জন্য regex কম্পাইলেশন এবং প্যাটার্নের ব্যবহারের উপর নজর রাখা উচিত।
Read more